package com.learning.thread.base.comunication;

import java.util.ArrayList;
import java.util.List;

/**
 * ClassName: CustomBlockQueue
 * Description: 线程同步： 简单实现一个阻塞队列
 * Date: 2018/6/28 22:53 【需求编号】
 *
 * @author Sam Sho
 * @version V1.0.0
 */
public class CustomBlockQueue {
    private List<Object> list = new ArrayList<>();


    public synchronized Object pop() throws InterruptedException {

        // 如果队列为空，等待
        while (list.isEmpty()) {
            this.wait();
        }
        if (list.size() > 0) {
            // 队列不为空，返回第一个对象
            return list.remove(0);
        } else {
            return null;
        }
    }

    public synchronized void put(Object object) {
        // 添加到队列当中
        list.add(object);
        // 通知一个 pop()方法，可以取数据
        this.notify();
    }
}

